package models.services;

//para obtener la fecha de la compu
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

import org.apache.log4j.Logger;

import models.entities.Cliente;
import models.services.exc.EntityNotFoundException;
import models.services.utils.DBManager;

public class ServicioClientes implements ICatalog<Cliente> {

	private final static Logger logger = Logger
			.getLogger(ServicioClientes.class);

	public int guardarActualizar(Cliente cliente) {

		DBManager manager = DBManager.getInstance();
		String appelidoMaterno = cliente.getAppelidoMaterno();
		String appelidoPaterno = cliente.getAppelidoPaterno();
		String calle = cliente.getCalle();
		int idColonia = cliente.getColonia();
		int noCasa = cliente.getNoCasa();
		String nombre = cliente.getNombre();
		String entreCalles1 = cliente.getEntreCalles1();
		int cp = cliente.getCP();
		String entreCalles2 = cliente.getEntreCalles2();
		String correo = cliente.getCorreo();
		String tel = cliente.getTel();

		char sexo = cliente.getSexo();
		Date fechaStatus = cliente.getFecha_status();
		// boolean status = cliente.isStatus();
		String comentarios = cliente.getComentarios();

		DateFormat format = new SimpleDateFormat("yyyy-MM-dd");

		String fecha = null;
		if (fechaStatus != null) {
			fecha = format.format(fechaStatus);
		}
		// obtener la fecha
		Calendar c = new GregorianCalendar();

		String dia, annio;
		int mes;

		dia = Integer.toString(c.get(Calendar.DATE));
		mes = c.get(Calendar.MONTH);
		annio = Integer.toString(c.get(Calendar.YEAR));
		String fechadehoy = annio + "-" + (mes + 1) + "-" + dia;

		String sql = "insert into clientes values(null,'" + nombre + "','"
				+ appelidoPaterno + "','" + appelidoMaterno + "','" + calle
				+ "'," + noCasa + "," + idColonia + ",'" + entreCalles1 + "','"
				+ tel + "'," + cp + ",'" + correo + "','" + sexo + "','"
				+ entreCalles2 + "'," + null + ",'" + fechadehoy + "','"
				+ comentarios + "')";

		int res = manager.guardarActualizar(sql);
		return res;
	}

	@Override
	public Cliente obtener(int id) throws EntityNotFoundException {
		String consulta = "select * from clientes where id=" + id;
		ResultSet rs = DBManager.getInstance().consultar(consulta);
		Cliente cliente = new Cliente();
		try {
			if (rs.next()) {
				do {
					int rsid = rs.getInt("id");
					String nombre = rs.getString("nombre");
					String apPaterno = rs.getString("apellidopat");
					String apMaterno = rs.getString("apellidomat");
					String sexo = rs.getString("sexo");
					String calle = rs.getString("calle");
					int numCasa = rs.getInt("numeroCasa");
					String correo = rs.getString("correo");
					String telefono = rs.getString("telefono");
					java.sql.Date date = rs.getDate("fecha_status");
					String comentarios = rs.getString("comentarios");
					boolean estatus = rs.getBoolean("status");
					String entre1 = rs.getString("entrecalles1");
					String entre2 = rs.getString("entrecalles2");
					int cp = rs.getInt("cp");
					cliente.setCP(cp);
					cliente.setId(rsid);
					cliente.setNombre(nombre);
					cliente.setAppelidoPaterno(apPaterno);
					cliente.setAppelidoMaterno(apMaterno);
					cliente.setSexo(sexo.charAt(0));
					cliente.setCalle(calle);
					cliente.setNoCasa(numCasa);
					cliente.setCorreo(correo);
					cliente.setTel(telefono);
					cliente.setComentarios(comentarios);
					cliente.setStatus(estatus);
					cliente.setFecha_status(date);
					cliente.setEntreCalles1(entre1);
					cliente.setEntreCalles2(entre2);
				} while (rs.next());
			} else {
				throw new EntityNotFoundException("Cliente no encontrado");
			}
		} catch (SQLException e) {
			logger.error(e.getCause(), e);
		}
		return cliente;
	}

	public boolean borrar(Cliente cliente) {
		DBManager manager = DBManager.getInstance();
		return manager.borrar(cliente.getId(), "clientes");
	}

	public int update(String campo, String value, int id) {
		DBManager manager = DBManager.getInstance();
		String sql = "update clientes set " + campo + " = '" + value
				+ "' where id=" + id;
		int guardarActualizar = manager.guardarActualizar(sql);
		return guardarActualizar;
	}

	public int update(String campo, int value, int id) {
		DBManager manager = DBManager.getInstance();
		String sql = "update clientes set " + campo + " = " + value
				+ " where id=" + id;
		int guardarActualizar = manager.guardarActualizar(sql);
		return guardarActualizar;

	}

	@Override
	public List<Cliente> buscarPorNumero(String campo, int valor) {
		List<Cliente> clientes = new ArrayList<Cliente>();
		DBManager manager = DBManager.getInstance();
		String sql = "select * from clientes where " + campo + " = " + valor;
		ResultSet rs = manager.consultar(sql);
		return this.buscar(rs, clientes);
	}

	@Override
	public List<Cliente> buscarPorString(String campo, String valor) {
		List<Cliente> clientes = new ArrayList<Cliente>();
		DBManager manager = DBManager.getInstance();
		String sql = "select * from clientes where " + campo + " like '%"
				+ valor + "%'";
		ResultSet rs = manager.consultar(sql);
		return this.buscar(rs, clientes);
	}

	private List<Cliente> buscar(ResultSet rs, List<Cliente> lista) {
		try {
			while (rs.next()) {
				Cliente cliente = new Cliente();
				int rsid = rs.getInt("id");
				String nombre = rs.getString("nombre");
				String apPaterno = rs.getString("apellidopat");
				String apMaterno = rs.getString("apellidomat");
				String sexo = rs.getString("sexo");
				String calle = rs.getString("calle");
				int numCasa = rs.getInt("numeroCasa");
				String correo = rs.getString("correo");
				String telefono = rs.getString("tel");
				java.sql.Date date = rs.getDate("fecha_status");
				String comentarios = rs.getString("comentarios");
				boolean estatus = rs.getBoolean("status");
				String entre1 = rs.getString("entrecalles1");
				String entre2 = rs.getString("entrecalles2");
				int cp = rs.getInt("cp");
				cliente.setCP(cp);
				cliente.setId(rsid);
				cliente.setNombre(nombre);
				cliente.setAppelidoPaterno(apPaterno);
				cliente.setAppelidoMaterno(apMaterno);
				cliente.setSexo(sexo.charAt(0));
				cliente.setCalle(calle);
				cliente.setNoCasa(numCasa);
				cliente.setCorreo(correo);
				cliente.setTel(telefono);
				cliente.setComentarios(comentarios);
				cliente.setStatus(estatus);
				cliente.setFecha_status(date);
				cliente.setEntreCalles1(entre1);
				cliente.setEntreCalles2(entre2);
				lista.add(cliente);
			}
		} catch (Exception e) {
			logger.error(e.getCause(), e);
		}
		return lista;
	}

}
